main() {
  // 3. 创建对象
  // Person p1 = new Person();
  // Dart 中可以省略 new 关键字不写
  // new 的过程是通过构造函数创建一个对象，初始化，并将对象返回
  Person p1 = Person();
  // 4. 调用属性
  print(p1.name);
  print(p1.age);
  print(p1.sex);

  // 5. 调用方法
  p1.sayHello();

  Person2 p2 = new Person2(name: 'abc', age: 200);
  print(p2.name);
  print(p2.age);
  print(p2.sex);

  Person2 p3 = new Person2.male(name: '宁', age: 108);
  print(p3.name);
  print(p3.age);
  print(p3.sex);

}

class Person {
  // 1. 定义属性
  String name = '张三';
  int age = 18;
  String sex = '男';
  // 2. 定义方法
  void sayHello() {
    print('hello world');
  }
}

class Person2 {
  // 1. 定义属性
  String? name;
  int? age;
  String? sex;

  // 主构造函数，和类名一样
  // Person2({String? name, int? age, String? sex}) {
  //   // 构造函数中的参数可以和属性名相同，也可以不同
  //   // 不同时，需要使用 this 关键字
  //   this.name = name;
  //   this.age = age;
  //   this.sex = sex;
  // }
  // 化简写法
  Person2({this.name, this.age, this.sex});


  // 命名构造函数
  // Person2.male({String? name, int? age}) {
  //   print('命名构造函数');
  //   this.name = name;
  //   this.age = age;
  // }
  // 化简写法: 后面的也可以做属性的初始化
  Person2.male({this.name, this.age}): this.sex = '男';
}